package jp.syuriken.snsw.terenaibot;

import java.util.Date;

/**
 * ポストを格納するラッパ。{@link NullPost}に注意。
 * 
 * <p>nullオブジェクトの作成は{@link NullPost}を使用するべきです。</p>
 * 
 * @author $Author: snswinhaiku.lo@gmail.com $
 * @version 0.2
 */
public abstract class Post {
	
	/**
	 * インスタンスを生成する。
	 */
	protected Post() {
	}
	
	/**
	 * ポストされた日時（ベンダー依存）を取得する。
	 * 
	 * @return ポストされた日時
	 */
	public abstract Date getCreatedAt();
	
	/**
	 * リプライ先のポストID (ユニーク) を取得する。
	 * 
	 * @return ユニークポストID
	 */
	public abstract String getInReplyToPostId();
	
	/**
	 * リプライ先のユーザーID (ユニーク) を取得する。
	 * 
	 * @return ユニークユーザーID。不変のほうが都合がいいと思われます。
	 */
	public abstract String getInReplyToUserId();
	
	/**
	 * ラッパされているオリジナルなクラス。
	 * 使用時はかならずinstanceofを使うこと。
	 * 
	 * @return ラッパ元のクラス
	 */
	public abstract Object getOriginal();
	
	/**
	 * ユニークなID (ベンダー依存) を取得する。 
	 * @return ユニークなID
	 */
	public abstract String getPostId();
	
	/**
	 * 投稿内容を取得します。
	 * 
	 * @return 投稿内容
	 */
	public abstract String getPostText();
	
	/**
	 * 投稿に用いられたクライアント名
	 * 
	 * @return クライアント名
	 */
	public abstract String getSource();
	
	/**
	 * ユーザーID (ユニーク, 不変) を取得する。
	 * 
	 * @return ユーザーID (ユニーク, 不変)
	 */
	public abstract String getUser();
	
	/**
	 * ユーザー名を取得する。
	 * 
	 * @return ユーザー名。ユーザーフレンドリーが好ましいです。
	 */
	public abstract String getUserName();
	
}
